package com.yanggu.sa_token.basic_demo.controller.up;

import cn.dev33.satoken.annotation.SaCheckLogin;
import cn.dev33.satoken.stp.StpUtil;
import cn.dev33.satoken.util.SaResult;
import com.yanggu.sa_token.basic_demo.SaUserCheckLogin;
import com.yanggu.sa_token.basic_demo.StpUserUtil;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * Sa-Token 整合 Sa-Token-StpUserUtil 的例子
 */
@RestController
@RequestMapping("/StpUserUtil")
public class StpUserUtilController {

    // 测试StpUserUtil体系： http://localhost:8081/StpUserUtil/info1
    // 通过type属性指定此注解校验的是我们自定义的`StpUserUtil`，而不是原生`StpUtil`
    @SaCheckLogin(type = StpUserUtil.TYPE)
    @RequestMapping("/info1")
    public String info1() {
        return "查询用户信息1";
    }

    // 测试StpUtil体系： http://localhost:8081/StpUserUtil/info2
    @SaCheckLogin
    @RequestMapping("/info2")
    public String info2() {
        return "查询用户信息2";
    }

    // 测试登录，浏览器访问： http://localhost:8081/StpUserUtil/doLogin1?username=zhang&password=123456
    @GetMapping("/doLogin1")
    public String doLogin1(String username, String password) {
        // 此处仅作模拟示例，真实项目需要从数据库中查询数据进行比对
        if ("zhang".equals(username) && "123456".equals(password)) {
            StpUserUtil.login(10001);
            return "登录成功";
        }
        return "登录失败";
    }

    // 测试登录，浏览器访问： http://localhost:8081/StpUserUtil/doLogin2?username=zhang&password=123456
    @GetMapping("/doLogin2")
    public String doLogin2(String username, String password) {
        // 此处仅作模拟示例，真实项目需要从数据库中查询数据进行比对
        if ("zhang".equals(username) && "123456".equals(password)) {
            StpUtil.login(10001);
            return "登录成功";
        }
        return "登录失败";
    }

    // 测试注销StpUserUtil体系  ---- http://localhost:8081/StpUserUtil/logout1
    @RequestMapping("/logout1")
    public SaResult logout1() {
        StpUserUtil.logout();
        return SaResult.ok();
    }

    // 测试注销StpUtil体系  ---- http://localhost:8081/StpUserUtil/logout2
    @RequestMapping("/logout2")
    public SaResult logout2() {
        StpUtil.logout();
        return SaResult.ok();
    }

    // 使用 @SaUserCheckLogin 的效果等同于使用：@SaCheckLogin(type = "user") --- http://localhost:8081/StpUserUtil/info3
    @SaUserCheckLogin
    @RequestMapping("/info3")
    public String info3() {
        return "查询用户信息3";
    }

}
